package org.cuppaper.utils;

import org.bukkit.ChatColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;

import java.util.*;
public class CleanItem {
    //搜索物品方法
    public static List<String> getNearbyItems(Player player, double radius) {
        List<String> itemNames = new ArrayList<>();
        //定义掉落物数量
        int counts = 0;
        //映射物品名字以及对应数量
        Map<String, Integer> itemCountMap = new HashMap<>();
        //遍历实体
        Collection<Entity> nearbyEntities = player.getWorld().getNearbyEntities(
                player.getLocation(),
                radius,
                radius,
                radius
        );
        //筛选掉落物 遍历掉落物名字以及数量并储存
        for (Entity entity : nearbyEntities) {
            if (entity instanceof Item item) {
                int itemAmount = item.getItemStack().getAmount();
                //每遍历一次加一次掉落物总数
                counts += itemAmount;
                //获取掉落物英文名字
                String englishName = item.getItemStack().getType().name();
                //翻译掉落物英文名字为中文 （还未做完整 见 ItemTranslator类）
                String itemName = ItemTranslator.translate(englishName);
                //储存对应掉落物名字以及对应数量
                itemCountMap.put(itemName, itemCountMap.getOrDefault(itemName, 0) + itemAmount);
            }
        }
        //输出掉落物总数
        itemNames.addFirst( ChatColor.GOLD + "[Aide] " + ChatColor.AQUA + "搜索到附近的 " + ChatColor.YELLOW + counts + ChatColor.AQUA +" 个掉落物\n");
        //遍历列出各种掉落物名字以及数量
        for (Map.Entry<String, Integer> entry : itemCountMap.entrySet()) {
            String itemName = entry.getKey();
            int itemCount = entry.getValue();
            itemNames.add(ChatColor.GREEN + "- " + ChatColor.GOLD + itemName + ChatColor.GREEN + ": " + ChatColor.YELLOW + itemCount + ChatColor.GREEN +" 个\n");
        }
        return itemNames;
    }
    //删除物品方法
    public static int cleanNearbyItems(Player player, double radius, String targetItem, int maxCount) {
        //定义删除数量
        int removedCount = 0;
        //遍历实体
        Collection<Entity> nearbyEntities = player.getWorld().getNearbyEntities(
                player.getLocation(),
                radius,
                radius,
                radius
        );
        //定义逻辑量 删除物品 限制物品最大值
        boolean removeAll = (targetItem == null || targetItem.trim().isEmpty());
        boolean limitCount = maxCount > 0;
        //定义物品数组列表
        List<Item> matchingItems = new ArrayList<>();
        /*

          以下为AI所写测试暂无bug

         */
        // 首先收集所有匹配的物品
        for (Entity entity : nearbyEntities) {
            if (entity instanceof Item item) {
                if (removeAll) {
                    matchingItems.add(item);
                } else {
                    String itemName = item.getItemStack().getType().name();
                    String translatedName = ItemTranslator.translate(itemName);
                    
                    if (translatedName.equalsIgnoreCase(targetItem) || itemName.equalsIgnoreCase(targetItem)) {
                        matchingItems.add(item);
                    }
                }
            }
        }
        
        // 然后按照指定数量删除物品
        int remainingToRemove = maxCount;
        
        for (Item item : matchingItems) {
            int itemAmount = item.getItemStack().getAmount();
            
            if (limitCount) {
                if (remainingToRemove <= 0) {
                    break; // 已经达到要删除的数量
                }
                
                if (itemAmount <= remainingToRemove) {
                    // 整个物品堆都可以删除
                    removedCount += itemAmount;
                    remainingToRemove -= itemAmount;
                    item.remove();
                } else {
                    // 只删除部分物品
                    removedCount += remainingToRemove;
                    
                    // 更新物品堆的数量
                    item.getItemStack().setAmount(itemAmount - remainingToRemove);
                    remainingToRemove = 0;
                }
            } else {
                // 不限制数量，删除所有匹配物品
                removedCount += itemAmount;
                item.remove();
            }
        }
        
        return removedCount;
    }
}